/**
 * 通用API请求工具
 */
const API = {
    // 基础URL
    baseURL: 'http://localhost:8080/api/admin',

    // 基础配置
    init() {
        axios.defaults.baseURL = this.baseURL;
        axios.defaults.headers.common['Content-Type'] = 'application/json';
        
        // 请求拦截器 - 添加token到请求头
        axios.interceptors.request.use(
            config => {
                const token = localStorage.getItem('adminToken');
                if (token) {
                    config.headers['Authorization'] = 'Bearer ' + token;
                }
                return config;
            },
            error => {
                return Promise.reject(error);
            }
        );
        
        // 响应拦截器 - 处理常见错误
        axios.interceptors.response.use(
            response => {
                return response;
            },
            error => {
                if (error.response) {
                    // 处理401未授权错误
                    if (error.response.status === 401) {
                        // 清除token和用户信息
                        localStorage.removeItem('adminToken');
                        localStorage.removeItem('adminUserInfo');
                        
                        // 如果不是登录页面，则跳转到登录页
                        if (window.location.pathname !== '/login-Manager.html') {
                            window.location.href = './login-Manager.html';
                        }
                    }
                }
                return Promise.reject(error);
            }
        );
    },
    
    // 通用请求方法
    request: async function(url, method = 'GET', data = null, contentType = 'application/json') {
        try {
            const config = {
                method: method,
                url: url,
                headers: {}
            };
            
            // 设置内容类型
            if (contentType) {
                config.headers['Content-Type'] = contentType;
            }
            
            // 根据请求方法设置数据
            if (data) {
                if (method === 'GET') {
                    config.params = data;
                } else {
                    config.data = data;
                }
            }
            
            // 发送请求
            const response = await axios(config);
            
            // 处理响应
            if (!response.data) {
                throw new Error(response.data.message || '请求失败');
            }
            
            return response.data;
        } catch (error) {
            console.error('API请求错误:', error);
            throw error;
        }
    },
    
    // 通用GET请求
    get: function(url) {
        return this.request(url);
    },
    
    // 通用POST请求
    post: function(url, data) {
        return this.request(url, 'POST', data);
    },
    
    // 通用PUT请求
    put: function(url, data) {
        return this.request(url, 'PUT', data);
    },
    
    // 通用DELETE请求
    delete: function(url) {
        return this.request(url, 'DELETE');
    },
    
    // 文件上传
    upload: function(url, formData) {
        return this.request(url, 'POST', formData, null);
    },


    // 管理员相关API
    admin: {
        // 登录
        login(username, password) {
            return axios.post('/api/admin/users/login', { username, password });
        },
        
        // 获取当前用户信息
        getCurrentUser() {
            return axios.get('/api/admin/users/current');
        },
        
        // 退出登录
        logout() {
            return axios.post('/api/admin/users/logout');
        },
        
        // 修改密码
        changePassword(oldPassword, newPassword) {
            return axios.post('/api/admin/users/change-password', {
                oldPassword,
                newPassword
            });
        },
        
        // 获取用户列表
        getUsers(page = 1, size = 10) {
            return axios.get(`/api/admin/users?page=${page-1}&size=${size}`);
        },
    }
};

/**
 * 通用模块API
 * @param {string} module 模块名称，如 'books', 'users', 'categories', 'orders'
 */
function createModuleAPI(module) {
    return {
        // 获取所有数据
        getAll: () => API.get(`/${module}`),
        
        // 分页获取数据
        getPage: (page = 0, size = 10, sort = null, direction = 'ASC') => {
            let url = `/${module}/page?page=${page}&size=${size}`;
            if (sort) {
                url += `&sort=${sort}&direction=${direction}`;
            }
            return API.get(url);
        },
        
        // 获取单个数据
        getById: (id) => API.get(`/${module}/${id}`),

        updateStatus: (id,status) => API.put(`/${module}/${id}/status`,{status}),
        
        // 创建数据
        create: (data) => API.post(`/${module}`, data),
        
        // 更新数据
        update: (id, data) => API.put(`/${module}/${id}`, data),
        
        // 删除数据
        delete: (id) => API.delete(`/${module}/${id}`)
    };
}

// 创建各模块API
const BookAPI = createModuleAPI('books');
const UserAPI = createModuleAPI('users');
const CategoryAPI = createModuleAPI('categories');
const OrderAPI = createModuleAPI('orders');

// 用户特殊API
UserAPI.resetPassword = (id) => API.post(`/users/${id}/reset-password`);

// 初始化API服务
API.init();